package com.cs.beneficios.web.action;

//import com.cs.beneficios.business.entity.AtributosDAO;
import com.cs.beneficios.business.entity.RestriccionDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.Beneficiario_AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.io.IOException;

import java.sql.SQLException;

import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class GuardarModificacionBOTAction extends Action {
    /**This is the main action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException {
        
        //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
        HttpSession session = request.getSession();
        String strBeneficiario = (String)session.getAttribute("beneficiario");
        String codeBOT = request.getParameter("codeBot");
        SubProgramaDAO subproDAO = new SubProgramaDAO(cf);
        
        String strCodigoSubpro = null;
        try {
            strCodigoSubpro = subproDAO.getCodeSubBOT(codeBOT);
        } catch (SQLException e) {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
        }
        
        session.setAttribute("CodigoSubpro",strCodigoSubpro);
        String strCodigoSede = request.getParameter("code");
        session.setAttribute("CodigoSede",strCodigoSede);
        Object obtercero = (Object)request.getParameter("tercero"); 
        session.setAttribute("Tercero",request.getParameter("tercero"));
        session.setAttribute("CostBenefit",request.getParameter("costbene"));
		session.setAttribute("TipoBenefit",request.getParameter("tipobene"));
        boolean insertar = true;
        boolean stop = true;
        
        List lAtributo = (List)session.getAttribute("ListaAtributos");
        List lError = new LinkedList();
        List lInsertar = new LinkedList();
        List lAtriNoRestric = new LinkedList();
        List lAtriAlerta = new LinkedList();
        List lInsertTercero = new LinkedList();
        RestriccionDAO objRestDAO;
        
        int tamanolatri = lAtributo.size();
        
        String variable = "";
        String tipodato = "";
        int compara1 =0;
        int compara2 =0;
        
        // Proceso para convertir la fecha
        String strDateBenefit = (String)request.getParameter("date");
        String ArrDate[] = strDateBenefit.split("-");
        String strYear = ArrDate[0];
        String strMonth = ArrDate[1];
        String strDay = ArrDate[2];
        strDateBenefit = null;
        strDateBenefit = strDay+"/"+strMonth+"/"+strYear;
        
        session.setAttribute("DateBenefit", strDateBenefit);
        // Fin del proceso
        
        for(int j=0;j<tamanolatri;j++)
        {
          AtributoVO atri = (AtributoVO)lAtributo.get(j);
          String codigo = atri.getCodatributo();
          String obtenercod = "Atri"+codigo;   
          String obligacion = atri.getObligatorio();
          
          if(obligacion.equals("S"))
          {
             compara1++; 
             String obCodVeri = (String)request.getParameter(obtenercod);
              if(!obCodVeri.equals(""))
              {
                compara2++; 
              }else
              {
                String NomError = atri.getEtiqueta();
                lError.add(NomError);
              }
          }
        }
          
        
        //proceso para validar los campos con las restricciones
        if(compara1 == compara2)
        {
            if(obtercero!=null)
            {
              
              for(int i=0;i<tamanolatri;i++)
              {
                 Beneficiario_AtributoVO objinsettercero = new Beneficiario_AtributoVO();
                 AtributoVO atritercero = (AtributoVO)lAtributo.get(i);
                      
                 String strCodiAtri = atritercero.getCodatributo();
                 String strCodiRest = atritercero.getRestriccion();
                 String strTipoAtri = atritercero.getTipoatributo();
                 String strNombre = atritercero.getNombre();
                 tipodato = atritercero.getTipodato();
                 variable = request.getParameter("Atri"+atritercero.getCodatributo());
                
                 if(strTipoAtri.equals("R"))
                 {
                    objinsettercero.setVariable(variable);
                    objinsettercero.setTipodato(tipodato);
                    objinsettercero.setCodigoatributo(strCodiAtri);
                    objinsettercero.setCodbeneficiario(strBeneficiario);
                    objinsettercero.setTipoatributo(strTipoAtri);
                    lInsertar.add(objinsettercero);
                    
                 }else
                 {
                    objinsettercero.setVariable(variable);
                    objinsettercero.setTipodato(tipodato);
                    objinsettercero.setCodigoatributo(strCodiAtri);
                    objinsettercero.setTipoatributo(strTipoAtri);
                    lInsertar.add(objinsettercero);
                   
                 }
                  
                    
                objinsettercero.setVariable(variable);
                objinsettercero.setTipodato(tipodato);
                objinsettercero.setCodigoatributo(strCodiAtri);
                objinsettercero.setCodbeneficiario(strBeneficiario);
                objinsettercero.setTipoatributo(strTipoAtri);
                lInsertTercero.add(objinsettercero);
              }
              session.setAttribute("listatercero",lInsertTercero);
             
            }else
            {
               for(int i=0;i<tamanolatri;i++)
               {
                  if(stop)
                  {
                      Beneficiario_AtributoVO objBenAtriVO = new Beneficiario_AtributoVO();
                      AtributoVO atrirestri = (AtributoVO)lAtributo.get(i);
                      String strCodiAtri = atrirestri.getCodatributo();
                      String strCodiRest = atrirestri.getRestriccion();
                      String strTipoAtri = atrirestri.getTipoatributo();
                      String strNombre = atrirestri.getNombre();
                      tipodato = atrirestri.getTipodato();
                  
                      if(tipodato.equals("F"))
                      {
                        String dia = request.getParameter("dia"+i);
                        String mes = request.getParameter("mes"+i);
                        String ano = request.getParameter("ano"+i);
                        variable = dia+"/"+mes+"/"+ano;
                      }else
                      {
                        variable = request.getParameter("Atri"+atrirestri.getCodatributo());
                      }
                      
                      if((Object)strCodiRest != null)
                      {
                          try
                          {
                             objRestDAO = new RestriccionDAO(cf);
                             String ArrRest[] = objRestDAO.ValidarRestriccion(strCodiAtri,strCodiRest,variable,tipodato);
                             cf.closeConnection(objRestDAO.getConn());
                             if(ArrRest[0].equals("N"))
                             {
                               if(ArrRest[1].equals("true"))
                               {
                                
                                   session.setAttribute("mensajes","1");
                                
                                 
                                 if(strTipoAtri.equals("R"))
                                 {
                                    objBenAtriVO.setVariable(variable);
                                    objBenAtriVO.setTipodato(tipodato);
                                    objBenAtriVO.setCodigoatributo(strCodiAtri);
                                    objBenAtriVO.setCodbeneficiario(strBeneficiario);
                                    objBenAtriVO.setTipoatributo(strTipoAtri);
                                    lInsertar.add(objBenAtriVO);
                                    
                                 }else
                                 {
                                    objBenAtriVO.setVariable(variable);
                                    objBenAtriVO.setTipodato(tipodato);
                                    objBenAtriVO.setCodigoatributo(strCodiAtri);
                                    objBenAtriVO.setTipoatributo(strTipoAtri);
                                    lInsertar.add(objBenAtriVO);
                                   
                                 }
                               }else
                               {
                                 insertar = false;
                                 
                                 session.setAttribute("mensajes","2");
                                 atrirestri.setDescrest(ArrRest[2]);
                                 String ver = atrirestri.getDescrest();
                                 lAtriNoRestric.add(atrirestri);
                                 
                                 
                               }
                             }else
                             {
                                if(ArrRest[1].equals("false"))
                                {
                                   session.setAttribute("mensajes","3");
                                   atrirestri.setDescrest(ArrRest[2]);
                                   lAtriAlerta.add(atrirestri);
                                   
                                   
                                }
                                if(strTipoAtri.equals("R"))
                                {
                                   objBenAtriVO.setVariable(variable);
                                   objBenAtriVO.setTipodato(tipodato);
                                   objBenAtriVO.setCodigoatributo(strCodiAtri);
                                   objBenAtriVO.setCodbeneficiario(strBeneficiario);
                                   objBenAtriVO.setTipoatributo(strTipoAtri);
                                   lInsertar.add(objBenAtriVO);
                                }else
                                {
                                   objBenAtriVO.setVariable(variable);
                                   objBenAtriVO.setTipodato(tipodato);
                                   objBenAtriVO.setCodigoatributo(strCodiAtri);
                                   objBenAtriVO.setTipoatributo(strTipoAtri);
                                   lInsertar.add(objBenAtriVO);
                                }
                             }                    
                          }catch(SQLException e){
                          	  System.err.println("[GuardarModificacionBOTAction]ERROR SQLException");
							System.err.println("/******** TDSUB - cwsub");
							e.printStackTrace();
							System.err.println("TDSSPE - cwsub ********/");
                          }
                      }else
                      {
                        if(strTipoAtri.equals("R"))
                        {
                           objBenAtriVO.setVariable(variable);
                           objBenAtriVO.setTipodato(tipodato);
                           objBenAtriVO.setCodigoatributo(strCodiAtri);
                           objBenAtriVO.setCodbeneficiario(strBeneficiario);
                           objBenAtriVO.setTipoatributo(strTipoAtri);
                           lInsertar.add(objBenAtriVO);
                        }else
                        {
                           objBenAtriVO.setVariable(variable);
                           objBenAtriVO.setTipodato(tipodato);
                           objBenAtriVO.setCodigoatributo(strCodiAtri);
                           objBenAtriVO.setTipoatributo(strTipoAtri);
                           lInsertar.add(objBenAtriVO);
                         }
                      }
                  }
               }
            }

          
            if(lAtriNoRestric.size()>0)
            {
               session.setAttribute("listanorestric",lAtriNoRestric);
            }else
            {
              session.removeAttribute("listanorestric");
            }
            
            if(lAtriAlerta.size()>0)
            {
              session.setAttribute("listaalerta",lAtriAlerta);
            }else
            {
              session.removeAttribute("listaalerta");
            }
             session.setAttribute("mensaje","1");
             session.setAttribute("listainsetar",lInsertar);
             
        }else{
          int tama = lError.size();
          String strTamaError=String.valueOf(tama);
          if(lAtriNoRestric.size()>0)
          {
             session.setAttribute("listanorestric",lAtriNoRestric);
          }else
          {
            session.removeAttribute("listanorestric");
          }
          
          if(lAtriAlerta.size()>0)
          {
            session.setAttribute("listaalerta",lAtriAlerta);
          }else
          {
            session.removeAttribute("listaalerta");
          }
          session.setAttribute("ListaErrores",lError);
          session.setAttribute("tamanoError",strTamaError);
          session.setAttribute("mensaje","2");
        }
          if((lAtriAlerta.size() > 0) || (lAtriNoRestric.size() > 0) || lError.size()>0)
          {
            return mapping.findForward("success");
          }else
          {
            return mapping.findForward("ver");
          }
    }
}
